class: center, middle, inverse, title-slide # Flujo de trabajo en R ## Ciencias Sociales Computacionales --- <style type="text/css"> .remark-slide-content { font-size: 25px; padding: 1em 1em 1em 1em; } </style> # Hoja de ruta ## ✔️ Paquetes complementarios ## ✔️ Proyectos en R ## ✔️ Importación de bases de datos ## ✔️ Mirada exploratoria de la base ## ✔️ Exportación de resultados <br> Algunas referencias que inspiran este material: https://es.r4ds.hadley.nz/flujo-de-trabajo-proyectos.html https://slides.djnavarro.net/project-structure/ --- class: inverse, center, middle # Paquetes <html> <div style='float:left'></div> <hr color='#EB811B' size=1px width=1125px> </html> --- # Paquetes .pull-left[ ¿Qué son?, ¿para qué nos sirven? <!-- --> ] -- .pull-right[ ✔️ Nuevas funciones, bases de datos y objetos de R en general, complementarios a lo contenido en R Base. ✔️ Aportes de Universidades, investigadores, usuaries y empresas, para expandir las capacidades del lenguaje R y facilitar su uso. ] --- #Paquetes ¿Cómo se usan? - Podemos descargarlos e instalarlos con el siguiente comando: ```r install.packages("nombre_del_paquete") ``` - Sólo es necesario instalar el paquete una vez por computadora. Se descargarán de la pagina de [CRAN](https://cran.r-project.org) los archivos correspondientes, ubicándose en el directorio donde hayamos instalado el programa - Una vez instalado el paquete, cada vez que abramos una nueva sesión de R y querramos utilizar el mismo debemos **cargarlo al ambiente de trabajo** mediante la siguiente función: ```r library(nombre_del_paquete) ``` --- class: inverse, center, middle # Directorios de trabajo <html> <div style='float:left'></div> <hr color='#EB811B' size=1px width=1125px> </html> --- #Directorios de trabajo - Proyectos ¿Cómo garantizar que la ruta para importar bases de datos al ambiente de R y para exportar resultados pueda funcionar si muevo mis carpetas o las comparto? .left-column[ <!-- --> ] .right-column[ ```r read.csv("C:\Users\Guido\Investigación\Bases_COvid\Base Covid19.csv") ``` ```r dir.create("C:\Users\Guido\Investigación\Resultados") ``` ```r setwd("C:\Users\Guido\Cursos\Diplomatura UNSAM\") ``` <img src="data:image/png;base64,#img/Rproject.png" width="213" style="display: block; margin: auto auto auto 0;" /> ] --- #Directorios de trabajo - Proyectos .pull-left[Rstudio tiene una herramienta muy útil de trabajo, que son los **proyectos**. Un proyecto es un archivo que identifica toda una carpeta de trabajo. Para crearlo, vamos al logo de nuevo proyecto y elegimos la carpeta de trabajo. Cuando trabajemos con proyectos: - El directorio de trabajo siempre toma como punto inicial la carpeta donde esta ubicada el archivo .Rproj. - El Environment es específico de nuestro proyecto. No se nos mezclará con resultados de código que podamos correr en otros proyectos. ] .pull-right[ <img src="data:image/png;base64,#img/nuevo_proyecto.png" width="839" /> <img src="data:image/png;base64,#img/nuevo_proyecto2.png" width="640" /> ] --- #Práctica - Abran RStudio en sus computadoras y creen un nuevo proyecto en un nuevo directorio de sus computadoras. - Abran un nuevo script, importen las librerías **"openxlsx"** y **"tidyverse"** al ambiente de trabajo. Instalenlas previamente en caso de no haberlo hecho aún. Recuerden: `install.packages("nombre_del_paquete")` - Guarden el script dentro de la carpeta del proyecto que crearon. - Ejecuten la función `list.files()` --- class: inverse, center, middle # Nombrando archivos <html> <div style='float:left'></div> <hr color='#EB811B' size=1px width=1125px> </html> --- #Nombrando Archivos ##Serie de recomendaciones para organizar la carpeta de trabajo de un proyecto - Preferentemente utilizar minúsculas para nombrar nuestros archivos ✅ procesamiento.r ❌ Procesamiento.r ✅ analisis.r - No utilizar espacios en blanco ni caracteres especiales (^.*?+|$) ✅ procesamiento_base_covid.r ❌ procesamiento base covid.r ❌ procesamiento.base.covid.r ✅ graficos_evolucion_covid.r ❌ gráficos_evolución_covid.r --- #Nombrando archivos (y/o carpetas) - Guardar consistencia en los caracteres utilizados y el orden de los componentes de los nombres ✅ procesamiento_base_covid.r ✅ graficos_evolucion_covid.r ❌ covid-19-informe.rmd - Si tengo muchos archivos en una carpeta: utilizar números para ordenar y palabras clave para documentos similares ✅ 01_procesamiento_base_covid.r ✅ 02_graficos_evolucion_covid.r ✅ 03_graficos_provincias_covid.r ✅ 04_informe_covid.r ❌ COVID_datos-VF20210414.r --- class: inverse, center, middle # Importación y Exportación de archivos <html> <div style='float:left'></div> <hr color='#EB811B' size=1px width=1125px> </html> --- #Importación de bases de datos A la hora de importar una base de datos nos podemos llegar a enfrentar a distintos tipos de archivos. En R contamos con **distintos paquetes y funciones** según el **tipo de extensión** del archivo: <table class="table table-striped table-hover" style="margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;"> Tipo de archivo </th> <th style="text-align:left;"> Paquete </th> <th style="text-align:left;"> Extension </th> <th style="text-align:left;"> Funciones </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Texto Plano </td> <td style="text-align:left;"> readr </td> <td style="text-align:left;"> .csv </td> <td style="text-align:left;"> read_csv() </td> </tr> <tr> <td style="text-align:left;"> Texto Plano </td> <td style="text-align:left;"> readr </td> <td style="text-align:left;"> .txt </td> <td style="text-align:left;"> read_txt() </td> </tr> <tr> <td style="text-align:left;"> Texto Plano </td> <td style="text-align:left;"> readr </td> <td style="text-align:left;"> .tsv </td> <td style="text-align:left;"> read_tsv() </td> </tr> <tr> <td style="text-align:left;"> Extension de R </td> <td style="text-align:left;"> RBase </td> <td style="text-align:left;"> .RDS </td> <td style="text-align:left;"> readRDS() </td> </tr> <tr> <td style="text-align:left;"> Extension de R </td> <td style="text-align:left;"> RBase </td> <td style="text-align:left;"> .RDATA </td> <td style="text-align:left;"> open() </td> </tr> <tr> <td style="text-align:left;"> Otros Softwares </td> <td style="text-align:left;"> haven </td> <td style="text-align:left;"> .dta </td> <td style="text-align:left;"> read_dta() </td> </tr> <tr> <td style="text-align:left;"> Otros Softwares </td> <td style="text-align:left;"> haven </td> <td style="text-align:left;"> .sav </td> <td style="text-align:left;"> read_spss() </td> </tr> <tr> <td style="text-align:left;"> Excel </td> <td style="text-align:left;"> openxlsx </td> <td style="text-align:left;"> .xlsx </td> <td style="text-align:left;"> read.xlsx() </td> </tr> <tr> <td style="text-align:left;"> Excel </td> <td style="text-align:left;"> readxl </td> <td style="text-align:left;"> .xls </td> <td style="text-align:left;"> read_excel() </td> </tr> </tbody> </table> --- #Importación de bases de datos ## Archivos de texto plano .pull-left[ En archivos de texto plano, el paquete se recomienda usar el paquete **readr** (que forma parte de tidyverse). Las diferencias entre cada una de sus funciones está en los parámetros que poseen para mejorar la importación. <img src="data:image/png;base64,#img/read_csv.png" width="1113" /> ] .pull-right[ ¿Qué es lo que indican algunos de los parámetros que tenemos en la imagen? - encabezado (¿Tiene o no una primera fila con los nombes de las variables?) - delimitador (¿Cómo están separadas las variables en el archivo?: Ej: `,`, `;`, tab) - separador decimal (¿Cómo figuran los números en la base? Ej: ¿10.000, 10000 o 10,000) - quotes: ¿Como están indicados los valores de las variables de texto en la base?, ¿Aparecen entre comillas? ] --- #Importación de bases de datos El primer y más importante parámetro de las funciones para importar datos suele llamarse **`file`**. Allí debemos especificar la ruta hasta el archivo, incluyendo la extensión del mismo. Si tenemos abierto un proyecto, el punto de partida para la ruta a especificar será la carpeta del proyecto. Si queremos ir hacia atrás en las carpetas agregamos **`../`** ```r base.vacunas<- read_csv( file = "../Fuentes/Covid19VacunasAgrupadas.csv", col_names = TRUE, # TRUE si la primera fila tiene nombres de columnas n_max = 100) # Puedo especificar cuantas filas levantar base.covid <- readRDS(file = "../Fuentes/base_covid_sample.RDS") ``` **IMPORTANTE**: Siempre que lean bases de datos asignarlas a un nuevo objeto. De lo contrario, las va a mostrar completas en consola y no va a guardarlas en el ambiente de trabajo (enviroment) --- #Práctica - Copien la carpeta "Bases adicionales" adentro de la carpeta del proyecto que crearon previamente. - Con el proyecto y script previos abiertos en RStudio, importen correctamente a su ambiente de trabajo el archivo **"Covid19VacunasAgrupadas.csv"** - Utilicen la función `read.xlsx` para importar como dos objetos separados las bases que se encuentran en ambas pestañas del excel **"Adquisiciones y vuelos covid.xlsx"**. (Pista: Pueden inspeccionar los parámetros de la función ejecutando **`?read.xlsx`** --- #Mirada exploratoria de la base de datos Algunas funciones útiles para explorar rápidamente el contenido de nuestra base de datos: - **`summary()`**: Muestra medidas de resumen de las variables: distintos momentos de la distribución para variables *numéricas* o de *fecha*, y un conteo de casos para variables de tipo *character*. - **`unique()`**: Permite ver los únicos valores que toma cierta variable en mi base de datos. - **`table()`**: Esta función puede utilizarse para hacer tabulados univariados o bivariados. - **`glimpse()`**<sup>t</sup>: nos muestra en formato más amigable un listado de las variables de la base, indicando la clase de variable en cuestión, y muestra los primeros valores de cada una de ellas - **`sample_n()`**<sup>t</sup>: Nos permite seleccionar una muestra al azar de **n** casos de nuestra base. Puede ser útil para una primera mirada de la base que trascienda a los primeros casos, o bien para procedimienos de muestreo. <sup>t</sup> Pertenecen al paquete **tidyverse** --- #Práctica - Lleven a la carpeta del proyecto la base de datos **"base_covid_sample.RDS"** que está en la carpeta Fuentes. - Importen la base de datos al ambiente de trabajo (Ver función adecuada para importar archivos .RDS) - Apliquen la función **`summary(nombre_base_datos)`**. Observen el resultado en consola. ¿Algo les llama atención de la información arrojada? - Ejecuten **`table(nombre_base_datos$sexo)`** y observen el total de casos de la base por sexo - ¿Qué valores puedo encontrar en la variable **clasificacion_resumen**? - Elaboren un tabulado bivariado entre las variables **sexo** y **clasificacion_resumen** --- #Exportación de resultados Por lo general, cada paquete que presenta funciones para importar bases de dato, tiene como complemento una función para exportar (guardar en el disco de nuestra PC) un objeto con la misma extensión. Ejemplos: - el paquete **openxlsx** tiene una función denominada **`write.xlsx()`** que nos permite exportar un dataframe creando un archivo **.xslx** - En RBase la función **`saveRDS()`** nos permite exportar archivos de extensión **.RDS** (son menos pesados para trabajarlos luego desde R) En general estas funciones tienen un primer parametro para especificar el objeto a exportar, y un segundo para especificar la ruta y el nombre de archivo a crear () ```r write.xlsx(x = objeto_resultados,file = "Resultados/cuadro1.xlsx") saveRDS(object = objeto_resultados,file = "Resultados/base_nueva.RDS") ``` --- #Práctica - Elaboren un tabulado bivariado con **table()** y asignenlo para generar un objeto en su ambiente de trabajo - Prueben ejecutar la siguiente línea de código: ```dir.create("Resultados/")```. ¿Que generó en la carpeta de su proyecto? - Exporten el objeto que contiene el tabulado anterior hacia un Excel utilizando la funcion **`write.xlsx`**.